package com.stt.weather.design.template;

import com.stt.weather.model.WeatherData;

/**
 * 通知处理模板类
 * 定义通知的处理流程
 */
public abstract class NotificationTemplate {
    
    /**
     * 模板方法，定义通知处理流程
     * @param weatherData 天气数据
     */
    public final void processNotification(WeatherData weatherData) {
        // 1. 准备通知内容
        String content = prepareContent(weatherData);
        // 2. 发送通知
        send(content);
        // 3. 记录日志
        logNotification(weatherData);
    }
    
    /**
     * 准备通知内容
     * @param weatherData 天气数据
     * @return 格式化的通知内容
     */
    protected String prepareContent(WeatherData weatherData) {
        return String.format("%s 天气通知：温度 %s°C, 湿度 %s %%, 风速 %s m/s",
            weatherData.getCityName(),
            weatherData.getTemp(),
            weatherData.getHumidity(),
            weatherData.getWindSpeed());
    }
    
    /**
     * 发送通知，由具体子类实现
     * @param content 通知内容
     */
    protected abstract void send(String content);
    
    /**
     * 记录通知日志
     * @param weatherData 天气数据
     */
    protected void logNotification(WeatherData weatherData) {
        System.out.println("已发送通知，城市：" + weatherData.getCityName() + 
            "，时间：" + weatherData.getObsTime());
    }
} 